iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1

觀前提醒:

  1. 我預設大家已經先思考並分析過題目,沒啥想法才開始 google 找解題靈感。若無,建議每題先花 1~2 顆番茄鐘的時間來分析題目比較好。可參考番茄鐘工作法
  2. 承上,既然已經有思考過了,那我這邊直接 po 題目 + 解題想法 + code +心得 。若已經在 code 內有足夠的註解了,那我可能解題想法 & 心得的部分就不會寫太多,免得干擾你的思考。
  3. 所有解法都是已經取得系統的 Accepted,但或許不是最優解法,請多包涵。
  4. 若對於解法不太懂,可以嘗試用 Chrome 的 debugger 來試跑看看 (教學文)
  5. 最後,歡迎在下面留言指教~教學相長才會進步歐~/images/emoticon/emoticon41.gif

題目

Write a function that reverses a string. The input string is given as an array of characters char[].

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

You may assume all the characters consist of printable ascii characters.

Example 1:

Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]

Example 2:

Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]

解題想法

認真講解,在不呼叫內建函式的前提下,他的正統解法,就是利用two pointers + memorization 來處理。我們把核心函式,一步步來用圖片整理如下:
(抱歉我這圖,是用onenote 內建畫筆畫的,有點醜QQ)
image
image
image
image
image

CODE

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function (s) {
  let i = 0;
  let j = s.length - 1;
  let temp = "";
  while (i < j) {
    temp = s[i];
    s[i] = s[j];
    s[j] = temp;
    i++;
    j--;
  }
};

心得

我相信一定不少朋友跟我一樣,在對於 JS 略懂略懂的前提下,看到這題 input 是 array,加上要反轉他。便開始反射動作要用 "Array.reverse()" 這個內建函式,來結束這一會合。
但,基本上LeetCode Easy 的題目,基本上就是希望大家用"條件判斷 + 迴圈"等基本概念來解題。所以內建函式我們這邊就不寫了,因為那真的太簡短,反而會讓大家學不到東西XDDD


謝謝大家的收看,LeetCode 小學堂我們下次見~/images/emoticon/emoticon29.gif


上一篇
[LeetCode with JavaScript] Day 7: Count and Say
下一篇
[LeetCode with JavaScript] Day 9: Plus One
系列文
[LeetCode with JavaScript] 一起來刷 LeetCode吧 ~~~ (ノ>ω<)ノ30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言